home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / SDKRPC.PAK / OBJIDL.IDL < prev    next >
Text File  |  1997-05-06  |  68KB  |  2,781 lines

  1. //+-------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File: objidl.idl
  7. //
  8. //--------------------------------------------------------------------------
  9.  
  10. cpp_quote("//+-------------------------------------------------------------------------")
  11. cpp_quote("//")
  12. cpp_quote("//  Microsoft Windows")
  13. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1996.")
  14. cpp_quote("//")
  15. cpp_quote("//--------------------------------------------------------------------------")
  16.  
  17. #ifndef DO_NO_IMPORTS
  18. import "unknwn.idl";
  19. import "wtypes.idl";
  20. #endif
  21.  
  22. interface IStream;
  23. interface IMoniker;
  24. interface IEnumMoniker;
  25. interface IEnumString;
  26. interface IRunningObjectTable;
  27. interface IStorage;
  28. interface IEnumSTATSTG;
  29. interface IAdviseSink;
  30. interface IBindCtx;
  31. interface IEnumMoniker;
  32.  
  33. /****************************************************************************
  34.  *  Component Object Interfaces
  35.  ****************************************************************************/
  36.  
  37. [
  38.     local,
  39.     object,
  40.     uuid(00000003-0000-0000-C000-000000000046)
  41. ]
  42.  
  43. interface IMarshal : IUnknown
  44. {
  45.  
  46.     typedef [unique] IMarshal *LPMARSHAL;
  47.  
  48.     HRESULT GetUnmarshalClass
  49.     (
  50.         [in] REFIID riid,
  51.         [in, unique] void *pv,
  52.         [in] DWORD dwDestContext,
  53.         [in, unique] void *pvDestContext,
  54.         [in] DWORD mshlflags,
  55.         [out] CLSID *pCid
  56.     );
  57.  
  58.     HRESULT GetMarshalSizeMax
  59.     (
  60.         [in] REFIID riid,
  61.         [in, unique] void *pv,
  62.         [in] DWORD dwDestContext,
  63.         [in, unique] void *pvDestContext,
  64.         [in] DWORD mshlflags,
  65.         [out] DWORD *pSize
  66.     );
  67.  
  68.     HRESULT MarshalInterface
  69.     (
  70.         [in, unique] IStream *pStm,
  71.         [in] REFIID riid,
  72.         [in, unique] void *pv,
  73.         [in] DWORD dwDestContext,
  74.         [in, unique] void *pvDestContext,
  75.         [in] DWORD mshlflags
  76.     );
  77.  
  78.     HRESULT UnmarshalInterface
  79.     (
  80.         [in, unique] IStream *pStm,
  81.         [in] REFIID riid,
  82.         [out] void **ppv
  83.     );
  84.  
  85.     HRESULT ReleaseMarshalData
  86.     (
  87.         [in, unique] IStream *pStm
  88.     );
  89.  
  90.     HRESULT DisconnectObject
  91.     (
  92.         [in] DWORD dwReserved
  93.     );
  94. }
  95.  
  96. [
  97.     local,
  98.     object,
  99.     uuid(00000002-0000-0000-C000-000000000046)
  100. ]
  101.  
  102. interface IMalloc : IUnknown
  103. {
  104.  
  105.     typedef [unique] IMalloc *LPMALLOC;
  106.  
  107.     void *Alloc([in] ULONG cb);
  108.  
  109.     void *Realloc ([in] void *pv,
  110.                    [in] ULONG cb);
  111.  
  112.     void Free([in] void *pv);
  113.  
  114.     ULONG GetSize([in] void *pv);
  115.  
  116.     int DidAlloc(void *pv);
  117.  
  118.     void HeapMinimize(void);
  119. }
  120.  
  121. [
  122.     local,
  123.     object,
  124.     uuid(0000001d-0000-0000-C000-000000000046)
  125. ]
  126.  
  127. interface IMallocSpy : IUnknown
  128. {
  129.  
  130.     typedef [unique] IMallocSpy *LPMALLOCSPY;
  131.  
  132.     ULONG PreAlloc
  133.     (
  134.         [in] ULONG cbRequest
  135.     );
  136.  
  137.     void  *PostAlloc
  138.     (
  139.         [in] void *pActual
  140.     );
  141.  
  142.     void  *PreFree
  143.     (
  144.         [in] void *pRequest,
  145.         [in] BOOL  fSpyed
  146.     );
  147.  
  148.     void  PostFree
  149.     (
  150.         [in] BOOL  fSpyed
  151.     );
  152.  
  153.     ULONG PreRealloc
  154.     (
  155.         [in] void   *pRequest,
  156.         [in] ULONG   cbRequest,
  157.         [out] void **ppNewRequest,
  158.         [in] BOOL    fSpyed
  159.     );
  160.  
  161.     void  *PostRealloc
  162.     (
  163.         [in] void *pActual,
  164.         [in] BOOL  fSpyed
  165.     );
  166.  
  167.     void  *PreGetSize
  168.     (
  169.         [in] void *pRequest,
  170.         [in] BOOL  fSpyed
  171.     );
  172.  
  173.     ULONG PostGetSize
  174.     (
  175.         [in] ULONG cbActual,
  176.         [in] BOOL  fSpyed
  177.     );
  178.  
  179.     void  *PreDidAlloc
  180.     (
  181.         [in] void *pRequest,
  182.         [in] BOOL  fSpyed
  183.     );
  184.  
  185.     int   PostDidAlloc
  186.     (
  187.         [in] void *pRequest,
  188.         [in] BOOL  fSpyed,
  189.         [in] int   fActual
  190.     );
  191.  
  192.     void  PreHeapMinimize(void);
  193.  
  194.     void  PostHeapMinimize(void);
  195. }
  196.  
  197. [
  198.     local,
  199.     object,
  200.     uuid(00000018-0000-0000-C000-000000000046)
  201. ]
  202.  
  203. interface IStdMarshalInfo : IUnknown
  204. {
  205.  
  206.     typedef [unique] IStdMarshalInfo * LPSTDMARSHALINFO;
  207.  
  208.     HRESULT GetClassForHandler
  209.     (
  210.         [in] DWORD dwDestContext,
  211.         [in, unique] void *pvDestContext,
  212.         [out] CLSID *pClsid
  213.     );
  214. }
  215.  
  216. [
  217.     object,
  218.     local,
  219.     uuid(00000019-0000-0000-C000-000000000046)
  220. ]
  221.  
  222. interface IExternalConnection : IUnknown
  223. {
  224.  
  225.     typedef [unique] IExternalConnection* LPEXTERNALCONNECTION;
  226.  
  227.  
  228.     // bit flags for IExternalConnection
  229.     typedef enum tagEXTCONN
  230.     {
  231.         EXTCONN_STRONG      = 0x0001,   // strong connection
  232.         EXTCONN_WEAK        = 0x0002,   // weak connection (table, container)
  233.         EXTCONN_CALLABLE    = 0x0004,   // table .vs. callable
  234.     } EXTCONN;
  235.  
  236.     // *** IExternalConnection methods ***
  237.     DWORD AddConnection
  238.     (
  239.         [in] DWORD extconn,
  240.         [in] DWORD reserved
  241.     );
  242.  
  243.     DWORD ReleaseConnection
  244.     (
  245.         [in] DWORD extconn,
  246.         [in] DWORD reserved,
  247.         [in] BOOL  fLastReleaseCloses
  248.     );
  249. }
  250.  
  251.  
  252. [
  253.     object,
  254.     local,
  255.     uuid(00000020-0000-0000-C000-000000000046)
  256. ]
  257.  
  258. interface IMultiQI : IUnknown
  259. {
  260.     typedef [unique] IMultiQI* LPMULTIQI;
  261.  
  262.     typedef struct tagMULTI_QI
  263.     {
  264.         const IID  *pIID; // pass this one in
  265.         IUnknown   *pItf; // get these out (you must set to NULL before calling)
  266.         HRESULT     hr;
  267.     } MULTI_QI;
  268.  
  269.     HRESULT QueryMultipleInterfaces
  270.     (
  271.         [in]     ULONG      cMQIs,
  272.         [in,out] MULTI_QI  *pMQIs
  273.     );
  274. }
  275.  
  276.  
  277. [
  278.     object,
  279.     uuid(00000100-0000-0000-C000-000000000046),
  280.     pointer_default(unique)
  281. ]
  282.  
  283. interface IEnumUnknown : IUnknown
  284. {
  285.  
  286.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  287.  
  288.     [local]
  289.     HRESULT Next(
  290.         [in] ULONG celt,
  291.         [out] IUnknown **rgelt,
  292.         [out] ULONG *pceltFetched);
  293.  
  294.     [call_as(Next)]
  295.     HRESULT RemoteNext(
  296.         [in] ULONG celt,
  297.         [out, size_is(celt), length_is(*pceltFetched)]
  298.         IUnknown **rgelt,
  299.         [out] ULONG *pceltFetched);
  300.  
  301.     HRESULT Skip(
  302.         [in] ULONG celt);
  303.  
  304.     HRESULT Reset();
  305.  
  306.     HRESULT Clone(
  307.         [out] IEnumUnknown **ppenum);
  308. }
  309.  
  310.  
  311. /****************************************************************************
  312.  *  Binding Interfaces
  313.  ****************************************************************************/
  314.  
  315. [
  316.     object,
  317.     uuid(0000000e-0000-0000-C000-000000000046),
  318.     pointer_default(unique)
  319. ]
  320.  
  321. interface IBindCtx : IUnknown
  322. {
  323.  
  324.     typedef [unique] IBindCtx *LPBC;
  325.  
  326.     typedef [unique] IBindCtx *LPBINDCTX;
  327.  
  328.     typedef struct tagBIND_OPTS {
  329.     DWORD       cbStruct;       //  sizeof(BIND_OPTS)
  330.     DWORD       grfFlags;
  331.     DWORD       grfMode;
  332.     DWORD       dwTickCountDeadline;
  333.     } BIND_OPTS, * LPBIND_OPTS;
  334.  
  335. cpp_quote("#if defined(__cplusplus)")
  336. cpp_quote("    typedef struct tagBIND_OPTS2 : tagBIND_OPTS{")
  337. cpp_quote("    DWORD           dwTrackFlags;")
  338. cpp_quote("    DWORD           dwClassContext;")
  339. cpp_quote("    LCID            locale;")
  340. cpp_quote("    COSERVERINFO *  pServerInfo;")
  341. cpp_quote("    } BIND_OPTS2, * LPBIND_OPTS2;")
  342. cpp_quote("#else")
  343.  
  344.     typedef struct tagBIND_OPTS2 {
  345.     DWORD           cbStruct;       //  sizeof(BIND_OPTS2)
  346.     DWORD           grfFlags;
  347.     DWORD           grfMode;
  348.     DWORD           dwTickCountDeadline;
  349.     DWORD           dwTrackFlags;
  350.     DWORD           dwClassContext;
  351.     LCID            locale;
  352.     COSERVERINFO *  pServerInfo;
  353.     } BIND_OPTS2, * LPBIND_OPTS2;
  354.  
  355. cpp_quote("#endif")
  356.  
  357.  
  358.     typedef enum tagBIND_FLAGS
  359.     {
  360.         BIND_MAYBOTHERUSER = 1,
  361.         BIND_JUSTTESTEXISTENCE = 2
  362.     } BIND_FLAGS;
  363.  
  364.     HRESULT RegisterObjectBound
  365.     (
  366.         [in, unique] IUnknown *punk
  367.     );
  368.  
  369.     HRESULT RevokeObjectBound
  370.     (
  371.         [in, unique] IUnknown *punk
  372.     );
  373.  
  374.     HRESULT ReleaseBoundObjects
  375.     (
  376.         void
  377.     );
  378.  
  379.     [local]
  380.     HRESULT SetBindOptions
  381.     (
  382.         [in] BIND_OPTS *pbindopts
  383.     );
  384.  
  385.     [call_as(SetBindOptions)]
  386.     HRESULT RemoteSetBindOptions
  387.     (
  388.         [in] BIND_OPTS2 *pbindopts
  389.     );
  390.  
  391.     [local]
  392.     HRESULT GetBindOptions
  393.     (
  394.         [in, out] BIND_OPTS *pbindopts
  395.     );
  396.  
  397.     [call_as(GetBindOptions)]
  398.     HRESULT RemoteGetBindOptions
  399.     (
  400.         [in, out] BIND_OPTS2 *pbindopts
  401.     );
  402.  
  403.     HRESULT GetRunningObjectTable
  404.     (
  405.         [out] IRunningObjectTable **pprot
  406.     );
  407.  
  408.     HRESULT RegisterObjectParam(
  409.         [in] LPOLESTR pszKey,
  410.         [in, unique] IUnknown *punk
  411.     );
  412.  
  413.     HRESULT GetObjectParam(
  414.         [in] LPOLESTR pszKey,
  415.         [out] IUnknown **ppunk
  416.     );
  417.  
  418.     HRESULT EnumObjectParam
  419.     (
  420.         [out] IEnumString **ppenum
  421.     );
  422.  
  423.     HRESULT RevokeObjectParam
  424.     (
  425.         [in] LPOLESTR pszKey
  426.     );
  427. }
  428.  
  429. [
  430.     object,
  431.     uuid(00000102-0000-0000-C000-000000000046),
  432.     pointer_default(unique)
  433. ]
  434.  
  435. interface IEnumMoniker : IUnknown
  436. {
  437.  
  438.     typedef [unique] IEnumMoniker *LPENUMMONIKER;
  439.  
  440.     [local]
  441.     HRESULT Next(
  442.         [in] ULONG celt,
  443.         [out, size_is(celt), length_is(*pceltFetched)]
  444.         IMoniker **rgelt,
  445.         [out] ULONG *pceltFetched);
  446.  
  447.     [call_as(Next)]
  448.     HRESULT RemoteNext(
  449.         [in] ULONG celt,
  450.         [out, size_is(celt), length_is(*pceltFetched)]
  451.         IMoniker **rgelt,
  452.         [out] ULONG *pceltFetched);
  453.  
  454.  
  455.     HRESULT Skip(
  456.         [in] ULONG celt);
  457.  
  458.     HRESULT Reset();
  459.  
  460.     HRESULT Clone(
  461.         [out] IEnumMoniker **ppenum);
  462. }
  463.  
  464. [
  465.     object,
  466.     uuid(00000126-0000-0000-C000-000000000046)
  467. ]
  468. interface IRunnableObject : IUnknown
  469. {
  470.  
  471.     typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
  472.  
  473.     HRESULT GetRunningClass(
  474.         [out] LPCLSID lpClsid);
  475.  
  476.     HRESULT Run(
  477.         [in] LPBINDCTX pbc);
  478.  
  479.     [local]
  480.     BOOL IsRunning();
  481.  
  482.     [call_as(IsRunning)]
  483.     HRESULT RemoteIsRunning();
  484.  
  485.     HRESULT LockRunning(
  486.         [in] BOOL fLock,
  487.         [in] BOOL fLastUnlockCloses);
  488.  
  489.     HRESULT SetContainedObject(
  490.         [in] BOOL fContained);
  491. }
  492.  
  493. [
  494.     object,
  495.     uuid(00000010-0000-0000-C000-000000000046)
  496. ]
  497.  
  498. interface IRunningObjectTable : IUnknown
  499. {
  500.  
  501.     typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
  502.  
  503.     HRESULT Register
  504.     (
  505.         [in] DWORD grfFlags,
  506.         [in, unique] IUnknown *punkObject,
  507.         [in, unique] IMoniker *pmkObjectName,
  508.         [out] DWORD *pdwRegister
  509.     );
  510.  
  511.     HRESULT Revoke
  512.     (
  513.         [in] DWORD dwRegister
  514.     );
  515.  
  516.     HRESULT IsRunning
  517.     (
  518.         [in, unique] IMoniker *pmkObjectName
  519.     );
  520.  
  521.     HRESULT GetObject
  522.     (
  523.         [in, unique] IMoniker *pmkObjectName,
  524.         [out] IUnknown **ppunkObject
  525.     );
  526.  
  527.     HRESULT NoteChangeTime
  528.     (
  529.         [in] DWORD dwRegister,
  530.         [in] FILETIME *pfiletime
  531.     );
  532.  
  533.     HRESULT GetTimeOfLastChange
  534.     (
  535.         [in, unique] IMoniker *pmkObjectName,
  536.         [out] FILETIME *pfiletime
  537.     );
  538.  
  539.     HRESULT EnumRunning
  540.     (
  541.         [out] IEnumMoniker **ppenumMoniker
  542.     );
  543.  
  544. }
  545.  
  546. [
  547.     object,
  548.     uuid(0000010c-0000-0000-C000-000000000046)
  549. ]
  550.  
  551. interface IPersist : IUnknown
  552. {
  553.  
  554.     typedef [unique] IPersist *LPPERSIST;
  555.  
  556.     HRESULT GetClassID
  557.     (
  558.         [out] CLSID *pClassID
  559.     );
  560. }
  561.  
  562. [
  563.     object,
  564.     uuid(00000109-0000-0000-C000-000000000046),
  565.     pointer_default(unique)
  566. ]
  567.  
  568. interface IPersistStream : IPersist
  569. {
  570.  
  571.     typedef [unique] IPersistStream *LPPERSISTSTREAM;
  572.  
  573.     HRESULT IsDirty
  574.     (
  575.         void
  576.     );
  577.  
  578.     HRESULT Load
  579.     (
  580.         [in, unique] IStream *pStm
  581.     );
  582.  
  583.     HRESULT Save
  584.     (
  585.         [in, unique] IStream *pStm,
  586.         [in] BOOL fClearDirty
  587.     );
  588.  
  589.     HRESULT GetSizeMax
  590.     (
  591.         [out] ULARGE_INTEGER *pcbSize
  592.     );
  593.  
  594. }
  595.  
  596. [
  597.     object,
  598.     uuid(0000000f-0000-0000-C000-000000000046),
  599.     pointer_default(unique)
  600. ]
  601.  
  602. interface IMoniker : IPersistStream
  603. {
  604.  
  605.     typedef [unique] IMoniker *LPMONIKER;
  606.  
  607.     // system moniker types; returned from IsSystemMoniker.
  608.     typedef enum tagMKSYS
  609.     {
  610.         MKSYS_NONE = 0,
  611.         MKSYS_GENERICCOMPOSITE = 1,
  612.         MKSYS_FILEMONIKER = 2,
  613.         MKSYS_ANTIMONIKER = 3,
  614.         MKSYS_ITEMMONIKER = 4,
  615.         MKSYS_POINTERMONIKER = 5,
  616.     //  MKSYS_URLMONIKER = 6,
  617.         MKSYS_CLASSMONIKER = 7
  618.     }MKSYS;
  619.  
  620.  
  621.     typedef [v1_enum] enum tagMKREDUCE
  622.     {
  623.         MKRREDUCE_ONE           =   3<<16,
  624.  
  625.         MKRREDUCE_TOUSER        =   2<<16,
  626.         MKRREDUCE_THROUGHUSER   =   1<<16,
  627.         MKRREDUCE_ALL           =   0
  628.     } MKRREDUCE;
  629.  
  630.  
  631.     [local]
  632.     HRESULT BindToObject(
  633.         [in, unique] IBindCtx *pbc,
  634.         [in, unique] IMoniker *pmkToLeft,
  635.         [in] REFIID riidResult,
  636.         [out, iid_is(riidResult)] void **ppvResult);
  637.  
  638.     [call_as(BindToObject)]
  639.     HRESULT RemoteBindToObject(
  640.         [in, unique] IBindCtx *pbc,
  641.         [in, unique] IMoniker *pmkToLeft,
  642.         [in] REFIID riidResult,
  643.         [out, iid_is(riidResult)] IUnknown **ppvResult);
  644.  
  645.     [local]
  646.     HRESULT BindToStorage(
  647.         [in, unique] IBindCtx *pbc,
  648.         [in, unique] IMoniker *pmkToLeft,
  649.         [in] REFIID riid,
  650.         [out, iid_is(riid)] void **ppvObj);
  651.  
  652.     [call_as(BindToStorage)]
  653.     HRESULT RemoteBindToStorage(
  654.         [in, unique] IBindCtx *pbc,
  655.         [in, unique] IMoniker *pmkToLeft,
  656.         [in] REFIID riid,
  657.         [out, iid_is(riid)] IUnknown **ppvObj);
  658.  
  659.     HRESULT Reduce(
  660.         [in, unique] IBindCtx *pbc,
  661.         [in] DWORD dwReduceHowFar,
  662.         [in, out, unique] IMoniker **ppmkToLeft,
  663.         [out] IMoniker **ppmkReduced);
  664.  
  665.     HRESULT ComposeWith(
  666.         [in, unique] IMoniker *pmkRight,
  667.         [in] BOOL fOnlyIfNotGeneric,
  668.         [out] IMoniker **ppmkComposite);
  669.  
  670.     HRESULT Enum(
  671.         [in] BOOL fForward,
  672.         [out] IEnumMoniker **ppenumMoniker);
  673.  
  674.     HRESULT IsEqual(
  675.         [in, unique] IMoniker *pmkOtherMoniker);
  676.  
  677.     HRESULT Hash(
  678.         [out] DWORD *pdwHash);
  679.  
  680.     HRESULT IsRunning(
  681.         [in, unique] IBindCtx *pbc,
  682.         [in, unique] IMoniker *pmkToLeft,
  683.         [in, unique] IMoniker *pmkNewlyRunning);
  684.  
  685.     HRESULT GetTimeOfLastChange(
  686.         [in, unique] IBindCtx *pbc,
  687.         [in, unique] IMoniker *pmkToLeft,
  688.         [out] FILETIME *pFileTime);
  689.  
  690.     HRESULT Inverse(
  691.         [out] IMoniker **ppmk);
  692.  
  693.     HRESULT CommonPrefixWith(
  694.         [in, unique] IMoniker *pmkOther,
  695.         [out] IMoniker **ppmkPrefix);
  696.  
  697.     HRESULT RelativePathTo(
  698.         [in, unique] IMoniker *pmkOther,
  699.         [out] IMoniker **ppmkRelPath);
  700.  
  701.     HRESULT GetDisplayName(
  702.         [in, unique] IBindCtx *pbc,
  703.         [in, unique] IMoniker *pmkToLeft,
  704.         [out] LPOLESTR *ppszDisplayName);
  705.  
  706.     HRESULT ParseDisplayName(
  707.         [in, unique] IBindCtx *pbc,
  708.         [in, unique] IMoniker *pmkToLeft,
  709.         [in] LPOLESTR pszDisplayName,
  710.         [out] ULONG *pchEaten,
  711.         [out] IMoniker **ppmkOut);
  712.  
  713.     HRESULT IsSystemMoniker(
  714.         [out] DWORD *pdwMksys);
  715.  
  716. }
  717.  
  718. [
  719.     object,
  720.     uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
  721.     pointer_default(unique)
  722. ]
  723.  
  724. interface IROTData : IUnknown
  725. {
  726.     HRESULT GetComparisonData(
  727.         [out, size_is(cbMax)] byte *pbData,
  728.         [in]  ULONG cbMax,
  729.         [out] ULONG *pcbData);
  730. }
  731.  
  732. [
  733.     object,
  734.     uuid(00000101-0000-0000-C000-000000000046),
  735.     pointer_default(unique)
  736. ]
  737.  
  738. interface IEnumString : IUnknown
  739. {
  740.  
  741.     typedef [unique] IEnumString *LPENUMSTRING;
  742.  
  743.     [local]
  744.     HRESULT Next(
  745.         [in] ULONG celt,
  746.         [out, size_is(celt), length_is(*pceltFetched)]
  747.         LPOLESTR *rgelt,
  748.         [out] ULONG *pceltFetched);
  749.  
  750.     [call_as(Next)]
  751.     HRESULT RemoteNext(
  752.         [in] ULONG celt,
  753.         [out, size_is(celt), length_is(*pceltFetched)]
  754.         LPOLESTR *rgelt,
  755.         [out] ULONG *pceltFetched);
  756.  
  757.  
  758.     HRESULT Skip(
  759.         [in] ULONG celt);
  760.  
  761.     HRESULT Reset();
  762.  
  763.     HRESULT Clone(
  764.         [out] IEnumString **ppenum);
  765. }
  766.  
  767.  
  768. /****************************************************************************
  769.  *  Structured Storage Interfaces
  770.  ****************************************************************************/
  771.  
  772. [
  773.     object,
  774.     uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
  775.     pointer_default(unique)
  776. ]
  777. interface ISequentialStream : IUnknown
  778. {
  779.     [local]
  780.     HRESULT Read(
  781.         [out, size_is(cb), length_is(*pcbRead)]
  782.         void *pv,
  783.         [in] ULONG cb,
  784.         [out] ULONG *pcbRead);
  785.  
  786.     [call_as(Read)]
  787.     HRESULT RemoteRead(
  788.         [out, size_is(cb), length_is(*pcbRead)]
  789.         byte *pv,
  790.         [in] ULONG cb,
  791.         [out] ULONG *pcbRead);
  792.  
  793.     [local]
  794.     HRESULT Write(
  795.         [in, size_is(cb)] void const *pv,
  796.         [in] ULONG cb,
  797.         [out] ULONG *pcbWritten);
  798.  
  799.     [call_as(Write)]
  800.     HRESULT RemoteWrite(
  801.         [in, size_is(cb)] byte const *pv,
  802.         [in] ULONG cb,
  803.         [out] ULONG *pcbWritten);
  804. }
  805.  
  806.  
  807. [
  808.     object,
  809.     uuid(0000000c-0000-0000-C000-000000000046),
  810.     pointer_default(unique)
  811. ]
  812.  
  813. interface IStream : ISequentialStream
  814. {
  815.  
  816.     typedef [unique] IStream *LPSTREAM;
  817.  
  818.     /* Storage stat buffer */
  819.  
  820.     typedef struct tagSTATSTG
  821.     {
  822.         LPOLESTR pwcsName;
  823.         DWORD type;
  824.         ULARGE_INTEGER cbSize;
  825.         FILETIME mtime;
  826.         FILETIME ctime;
  827.         FILETIME atime;
  828.         DWORD grfMode;
  829.         DWORD grfLocksSupported;
  830.         CLSID clsid;
  831.         DWORD grfStateBits;
  832.     DWORD reserved;
  833.     } STATSTG;
  834.  
  835.  
  836.     /* Storage element types */
  837.     typedef enum tagSTGTY
  838.     {
  839.         STGTY_STORAGE   = 1,
  840.         STGTY_STREAM    = 2,
  841.         STGTY_LOCKBYTES = 3,
  842.         STGTY_PROPERTY  = 4
  843.     } STGTY;
  844.  
  845.     typedef enum tagSTREAM_SEEK
  846.     {
  847.         STREAM_SEEK_SET = 0,
  848.         STREAM_SEEK_CUR = 1,
  849.         STREAM_SEEK_END = 2
  850.     } STREAM_SEEK;
  851.  
  852.     typedef enum tagLOCKTYPE
  853.     {
  854.         LOCK_WRITE      = 1,
  855.         LOCK_EXCLUSIVE  = 2,
  856.         LOCK_ONLYONCE   = 4
  857.     } LOCKTYPE;
  858.  
  859.     [local]
  860.     HRESULT Seek(
  861.         [in] LARGE_INTEGER dlibMove,
  862.         [in] DWORD dwOrigin,
  863.         [out] ULARGE_INTEGER *plibNewPosition);
  864.  
  865.     [call_as(Seek)]
  866.     HRESULT RemoteSeek(
  867.         [in] LARGE_INTEGER dlibMove,
  868.         [in] DWORD dwOrigin,
  869.         [out] ULARGE_INTEGER *plibNewPosition);
  870.  
  871.     HRESULT SetSize(
  872.         [in] ULARGE_INTEGER libNewSize);
  873.  
  874.     [local]
  875.     HRESULT CopyTo(
  876.         [in, unique] IStream *pstm,
  877.         [in] ULARGE_INTEGER cb,
  878.         [out] ULARGE_INTEGER *pcbRead,
  879.         [out] ULARGE_INTEGER *pcbWritten);
  880.  
  881.     [call_as(CopyTo)]
  882.     HRESULT RemoteCopyTo(
  883.         [in, unique] IStream *pstm,
  884.         [in] ULARGE_INTEGER cb,
  885.         [out] ULARGE_INTEGER *pcbRead,
  886.         [out] ULARGE_INTEGER *pcbWritten);
  887.  
  888.     HRESULT Commit(
  889.         [in] DWORD grfCommitFlags);
  890.  
  891.     HRESULT Revert();
  892.  
  893.     HRESULT LockRegion(
  894.         [in] ULARGE_INTEGER libOffset,
  895.         [in] ULARGE_INTEGER cb,
  896.         [in] DWORD dwLockType);
  897.  
  898.     HRESULT UnlockRegion(
  899.         [in] ULARGE_INTEGER libOffset,
  900.         [in] ULARGE_INTEGER cb,
  901.         [in] DWORD dwLockType);
  902.  
  903.     HRESULT Stat(
  904.         [out] STATSTG *pstatstg,
  905.         [in] DWORD grfStatFlag);
  906.  
  907.     HRESULT Clone(
  908.         [out] IStream **ppstm);
  909.  
  910. }
  911.  
  912. [
  913.     object,
  914.     uuid(0000000d-0000-0000-C000-000000000046),
  915.     pointer_default(unique)
  916. ]
  917.  
  918. interface IEnumSTATSTG : IUnknown
  919. {
  920.  
  921.     typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
  922.  
  923.     [local]
  924.     HRESULT Next(
  925.         [in] ULONG celt,
  926.         [out, size_is(celt), length_is(*pceltFetched)]
  927.         STATSTG *rgelt,
  928.         [out] ULONG *pceltFetched);
  929.  
  930.     [call_as(Next)]
  931.     HRESULT RemoteNext(
  932.         [in] ULONG celt,
  933.         [out, size_is(celt), length_is(*pceltFetched)]
  934.         STATSTG *rgelt,
  935.         [out] ULONG *pceltFetched);
  936.  
  937.     HRESULT Skip(
  938.         [in] ULONG celt);
  939.  
  940.     HRESULT Reset();
  941.  
  942.     HRESULT Clone(
  943.         [out] IEnumSTATSTG **ppenum);
  944. }
  945.  
  946. [
  947.     object,
  948.     uuid(0000000b-0000-0000-C000-000000000046),
  949.     pointer_default(unique)
  950. ]
  951.  
  952. interface IStorage : IUnknown
  953. {
  954.  
  955.     typedef [unique] IStorage * LPSTORAGE;
  956.  
  957.     typedef struct tagRemSNB
  958.     {
  959.         unsigned long ulCntStr;
  960.         unsigned long ulCntChar;
  961.         [size_is(ulCntChar)] OLECHAR rgString[];
  962.     } RemSNB;
  963.  
  964.     typedef [unique] RemSNB * wireSNB;
  965.     typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
  966.  
  967.     HRESULT CreateStream(
  968.         [in, string] const OLECHAR *pwcsName,
  969.         [in] DWORD grfMode,
  970.         [in] DWORD reserved1,
  971.         [in] DWORD reserved2,
  972.         [out] IStream **ppstm);
  973.  
  974.     [local]
  975.     HRESULT OpenStream(
  976.         [in, string] const OLECHAR *pwcsName,
  977.         [in, unique] void *reserved1,
  978.         [in] DWORD grfMode,
  979.         [in] DWORD reserved2,
  980.         [out] IStream **ppstm);
  981.  
  982.     [call_as(OpenStream)]
  983.     HRESULT RemoteOpenStream(
  984.         [in, string] const OLECHAR *pwcsName,
  985.         [in] unsigned long cbReserved1,
  986.         [in, unique, size_is(cbReserved1)] byte *reserved1,
  987.         [in] DWORD grfMode,
  988.         [in] DWORD reserved2,
  989.         [out] IStream **ppstm);
  990.  
  991.     HRESULT CreateStorage(
  992.         [in, string] const OLECHAR *pwcsName,
  993.         [in] DWORD grfMode,
  994.         [in] DWORD dwStgFmt,
  995.         [in] DWORD reserved2,
  996.         [out] IStorage **ppstg);
  997.  
  998.     HRESULT OpenStorage(
  999.         [in, unique, string] const OLECHAR *pwcsName,
  1000.         [in, unique] IStorage *pstgPriority,
  1001.         [in] DWORD grfMode,
  1002.         [in, unique] SNB snbExclude,
  1003.         [in] DWORD reserved,
  1004.         [out] IStorage **ppstg);
  1005.  
  1006.     HRESULT CopyTo(
  1007.         [in] DWORD ciidExclude,
  1008.         [in, unique, size_is(ciidExclude)] IID const *rgiidExclude,
  1009.         [in, unique] SNB snbExclude,
  1010.         [in, unique] IStorage *pstgDest);
  1011.  
  1012.     HRESULT MoveElementTo(
  1013.         [in, string] const OLECHAR * pwcsName,
  1014.         [in, unique] IStorage *pstgDest,
  1015.         [in, string] const OLECHAR *pwcsNewName,
  1016.         [in] DWORD grfFlags);
  1017.  
  1018.     HRESULT Commit(
  1019.         [in] DWORD grfCommitFlags);
  1020.  
  1021.     HRESULT Revert();
  1022.  
  1023.     [local]
  1024.     HRESULT EnumElements(
  1025.         [in] DWORD reserved1,
  1026.         [in, unique, size_is(1)] void *reserved2,
  1027.         [in] DWORD reserved3,
  1028.         [out] IEnumSTATSTG **ppenum);
  1029.  
  1030.  
  1031.     [call_as(EnumElements)]
  1032.     HRESULT RemoteEnumElements(
  1033.         [in] DWORD reserved1,
  1034.         [in] unsigned long cbReserved2,
  1035.         [in, unique, size_is(cbReserved2)] byte *reserved2,
  1036.         [in] DWORD reserved3,
  1037.         [out] IEnumSTATSTG **ppenum);
  1038.  
  1039.     HRESULT DestroyElement(
  1040.         [in, string] const OLECHAR *pwcsName);
  1041.  
  1042.     HRESULT RenameElement(
  1043.         [in, string] const OLECHAR *pwcsOldName,
  1044.         [in, string] const OLECHAR *pwcsNewName);
  1045.  
  1046.     HRESULT SetElementTimes(
  1047.         [in, string] const OLECHAR *pwcsName,
  1048.         [in] FILETIME const *pctime,
  1049.         [in] FILETIME const *patime,
  1050.         [in] FILETIME const *pmtime);
  1051.  
  1052.     HRESULT SetClass(
  1053.         [in] REFCLSID clsid);
  1054.  
  1055.     HRESULT SetStateBits(
  1056.         [in] DWORD grfStateBits,
  1057.         [in] DWORD grfMask);
  1058.  
  1059.     HRESULT Stat(
  1060.         [out] STATSTG *pstatstg,
  1061.         [in] DWORD grfStatFlag);
  1062. }
  1063.  
  1064. [
  1065.     object,
  1066.     uuid(0000010b-0000-0000-C000-000000000046),
  1067.     pointer_default(unique)
  1068. ]
  1069.  
  1070. interface IPersistFile : IPersist
  1071. {
  1072.  
  1073.     typedef [unique] IPersistFile *LPPERSISTFILE;
  1074.  
  1075.     HRESULT IsDirty
  1076.     (
  1077.         void
  1078.     );
  1079.  
  1080.     HRESULT Load
  1081.     (
  1082.         [in] LPCOLESTR pszFileName,
  1083.         [in] DWORD dwMode
  1084.     );
  1085.  
  1086.     HRESULT Save
  1087.     (
  1088.         [in, unique] LPCOLESTR pszFileName,
  1089.         [in] BOOL fRemember
  1090.     );
  1091.  
  1092.     HRESULT SaveCompleted
  1093.     (
  1094.         [in, unique] LPCOLESTR pszFileName
  1095.     );
  1096.  
  1097.     HRESULT GetCurFile
  1098.     (
  1099.         [out] LPOLESTR *ppszFileName
  1100.     );
  1101. }
  1102.  
  1103. [
  1104.     object,
  1105.     uuid(0000010a-0000-0000-C000-000000000046),
  1106.     pointer_default(unique)
  1107. ]
  1108.  
  1109. interface IPersistStorage : IPersist
  1110. {
  1111.  
  1112.     typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
  1113.  
  1114.     HRESULT IsDirty
  1115.     (
  1116.         void
  1117.     );
  1118.  
  1119.     HRESULT InitNew
  1120.     (
  1121.         [in, unique] IStorage *pStg
  1122.     );
  1123.  
  1124.     HRESULT Load
  1125.     (
  1126.         [in, unique] IStorage *pStg
  1127.     );
  1128.  
  1129.     HRESULT Save
  1130.     (
  1131.         [in, unique] IStorage *pStgSave,
  1132.         [in] BOOL fSameAsLoad
  1133.     );
  1134.  
  1135.     HRESULT SaveCompleted
  1136.     (
  1137.         [in, unique] IStorage *pStgNew
  1138.     );
  1139.  
  1140.     HRESULT HandsOffStorage
  1141.     (
  1142.         void
  1143.     );
  1144. }
  1145.  
  1146. [
  1147.     object,
  1148.     uuid(0000000a-0000-0000-C000-000000000046),
  1149.     pointer_default(unique)
  1150. ]
  1151.  
  1152. interface ILockBytes : IUnknown
  1153. {
  1154.  
  1155.     typedef [unique] ILockBytes *LPLOCKBYTES;
  1156.  
  1157.     [local]
  1158.     HRESULT ReadAt(
  1159.         [in] ULARGE_INTEGER ulOffset,
  1160.         [out, size_is(cb), length_is(*pcbRead)]
  1161.         void *pv,
  1162.         [in] ULONG cb,
  1163.         [out] ULONG *pcbRead);
  1164.  
  1165.     [call_as(ReadAt)]
  1166.     HRESULT _stdcall RemoteReadAt(
  1167.         [in] ULARGE_INTEGER ulOffset,
  1168.         [out, size_is(cb), length_is(*pcbRead)]
  1169.         byte *pv,
  1170.         [in] ULONG cb,
  1171.         [out] ULONG *pcbRead);
  1172.  
  1173.     [local]
  1174.     HRESULT WriteAt(
  1175.         [in] ULARGE_INTEGER ulOffset,
  1176.         [in, size_is(cb)] void const *pv,
  1177.         [in] ULONG cb,
  1178.         [out] ULONG *pcbWritten);
  1179.  
  1180.     [call_as(WriteAt)]
  1181.     HRESULT RemoteWriteAt(
  1182.         [in] ULARGE_INTEGER ulOffset,
  1183.         [in, size_is(cb)] byte const *pv,
  1184.         [in] ULONG cb,
  1185.         [out] ULONG *pcbWritten);
  1186.  
  1187.     HRESULT Flush();
  1188.  
  1189.     HRESULT SetSize(
  1190.         [in] ULARGE_INTEGER cb);
  1191.  
  1192.     HRESULT LockRegion(
  1193.         [in] ULARGE_INTEGER libOffset,
  1194.         [in] ULARGE_INTEGER cb,
  1195.         [in] DWORD dwLockType);
  1196.  
  1197.     HRESULT UnlockRegion(
  1198.         [in] ULARGE_INTEGER libOffset,
  1199.         [in] ULARGE_INTEGER cb,
  1200.         [in] DWORD dwLockType);
  1201.  
  1202.     HRESULT Stat(
  1203.         [out] STATSTG *pstatstg,
  1204.         [in] DWORD grfStatFlag);
  1205. }
  1206.  
  1207. [
  1208.     object,
  1209.     uuid(00000103-0000-0000-C000-000000000046),
  1210.     pointer_default(unique)
  1211. ]
  1212.  
  1213. interface IEnumFORMATETC : IUnknown
  1214. {
  1215.  
  1216.     typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
  1217.  
  1218.  
  1219.     typedef struct tagDVTARGETDEVICE {
  1220.         DWORD tdSize;
  1221.         WORD tdDriverNameOffset;
  1222.         WORD tdDeviceNameOffset;
  1223.         WORD tdPortNameOffset;
  1224.         WORD tdExtDevmodeOffset;
  1225.         [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
  1226.         BYTE tdData[];
  1227.     }DVTARGETDEVICE;
  1228.  
  1229.  
  1230.     typedef CLIPFORMAT *LPCLIPFORMAT;
  1231.  
  1232.     typedef struct tagFORMATETC {
  1233.         CLIPFORMAT cfFormat;
  1234.         [unique] DVTARGETDEVICE * ptd;
  1235.         DWORD dwAspect;
  1236.         LONG lindex;
  1237.         DWORD tymed;
  1238.     }FORMATETC, *LPFORMATETC;
  1239.  
  1240.     [local]
  1241.     HRESULT Next(
  1242.         [in] ULONG celt,
  1243.         [out, size_is(celt), length_is(*pceltFetched )]
  1244.         FORMATETC *rgelt,
  1245.         [out] ULONG *pceltFetched);
  1246.  
  1247.     [call_as(Next)]
  1248.     HRESULT RemoteNext(
  1249.         [in] ULONG celt,
  1250.         [out, size_is(celt), length_is(*pceltFetched )]
  1251.         FORMATETC *rgelt,
  1252.         [out] ULONG *pceltFetched);
  1253.  
  1254.     HRESULT Skip(
  1255.         [in] ULONG celt);
  1256.  
  1257.     HRESULT Reset();
  1258.  
  1259.     HRESULT Clone(
  1260.         [out] IEnumFORMATETC **ppenum);
  1261. }
  1262.  
  1263. [
  1264.     object,
  1265.     uuid(00000105-0000-0000-C000-000000000046),
  1266.     pointer_default(unique)
  1267. ]
  1268.  
  1269. interface IEnumSTATDATA : IUnknown
  1270. {
  1271.  
  1272.     typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
  1273.  
  1274.     //Advise Flags
  1275.     typedef enum tagADVF
  1276.     {
  1277.         ADVF_NODATA = 1,
  1278.         ADVF_PRIMEFIRST = 2,
  1279.         ADVF_ONLYONCE = 4,
  1280.         ADVF_DATAONSTOP = 64,
  1281.         ADVFCACHE_NOHANDLER = 8,
  1282.         ADVFCACHE_FORCEBUILTIN = 16,
  1283.         ADVFCACHE_ONSAVE = 32
  1284.     } ADVF;
  1285.  
  1286.  
  1287.     // Stats for data; used by several enumerations and by at least one
  1288.     // implementation of IDataAdviseHolder; if a field is not used, it
  1289.     // will be NULL.
  1290.  
  1291.     typedef struct tagSTATDATA
  1292.     {                              // field used by:
  1293.         FORMATETC formatetc;       // EnumAdvise, EnumData (cache), EnumFormats
  1294.         DWORD advf;                // EnumAdvise, EnumData (cache)
  1295.         [unique] IAdviseSink * pAdvSink; // EnumAdvise
  1296.         DWORD dwConnection;        // EnumAdvise
  1297.     } STATDATA;
  1298.     typedef STATDATA *LPSTATDATA;
  1299.  
  1300.     [local]
  1301.     HRESULT Next(
  1302.         [in] ULONG celt,
  1303.         [out, size_is(celt), length_is(*pceltFetched)]
  1304.         STATDATA *rgelt,
  1305.         [out] ULONG *pceltFetched);
  1306.  
  1307.     [call_as(Next)]
  1308.     HRESULT RemoteNext(
  1309.         [in] ULONG celt,
  1310.         [out, size_is(celt), length_is(*pceltFetched)]
  1311.         STATDATA *rgelt,
  1312.         [out] ULONG *pceltFetched);
  1313.  
  1314.     HRESULT Skip(
  1315.         [in] ULONG celt);
  1316.  
  1317.     HRESULT Reset();
  1318.  
  1319.     HRESULT Clone(
  1320.         [out] IEnumSTATDATA **ppenum);
  1321. }
  1322.  
  1323. [
  1324.     object,
  1325.     uuid(00000012-0000-0000-C000-000000000046),
  1326.     pointer_default(unique)
  1327. ]
  1328.  
  1329. interface IRootStorage : IUnknown
  1330. {
  1331.  
  1332.     typedef [unique] IRootStorage *LPROOTSTORAGE;
  1333.  
  1334.     HRESULT SwitchToFile
  1335.     (
  1336.         [in] LPOLESTR pszFile
  1337.     );
  1338. }
  1339.  
  1340.  
  1341. /****************************************************************************
  1342.  *  Notification Interfaces
  1343.  ****************************************************************************/
  1344.  
  1345. [
  1346.     object,
  1347.     uuid(0000010f-0000-0000-C000-000000000046),
  1348.     pointer_default(unique)
  1349. ]
  1350.  
  1351. interface IAdviseSink : IUnknown
  1352. {
  1353.  
  1354.     typedef IAdviseSink *LPADVISESINK;
  1355.  
  1356.     typedef [v1_enum] enum tagTYMED {
  1357.         TYMED_HGLOBAL = 1,
  1358.         TYMED_FILE = 2,
  1359.         TYMED_ISTREAM = 4,
  1360.         TYMED_ISTORAGE = 8,
  1361.         TYMED_GDI = 16,
  1362.         TYMED_MFPICT = 32,
  1363.         TYMED_ENHMF = 64,
  1364.         TYMED_NULL = 0
  1365.     } TYMED;
  1366.  
  1367.     cpp_quote("#ifndef RC_INVOKED")
  1368.     cpp_quote("#pragma warning(disable:4200)")
  1369.     cpp_quote("#endif")
  1370.  
  1371.     typedef struct tagRemSTGMEDIUM {
  1372.         DWORD tymed;
  1373.         DWORD dwHandleType;
  1374.         unsigned long pData;
  1375.         unsigned long pUnkForRelease;
  1376.         unsigned long cbData;
  1377.         [size_is(cbData)] byte data[];
  1378.     } RemSTGMEDIUM;
  1379.     cpp_quote("#ifndef RC_INVOKED")
  1380.     cpp_quote("#pragma warning(default:4200)")
  1381.     cpp_quote("#endif")
  1382.  
  1383.  
  1384. cpp_quote("#ifdef NONAMELESSUNION")
  1385. cpp_quote("typedef struct tagSTGMEDIUM {")
  1386. cpp_quote("    DWORD tymed;")
  1387. cpp_quote("    union {")
  1388. cpp_quote("        HBITMAP hBitmap;")
  1389. cpp_quote("        HMETAFILEPICT hMetaFilePict;")
  1390. cpp_quote("        HENHMETAFILE hEnhMetaFile;")
  1391. cpp_quote("        HGLOBAL hGlobal;")
  1392. cpp_quote("        LPOLESTR lpszFileName;")
  1393. cpp_quote("        IStream *pstm;")
  1394. cpp_quote("        IStorage *pstg;")
  1395. cpp_quote("        } u;")
  1396. cpp_quote("    IUnknown *pUnkForRelease;")
  1397. cpp_quote("}uSTGMEDIUM;")
  1398. cpp_quote("#else")
  1399.  
  1400.     typedef struct tagSTGMEDIUM {
  1401.     DWORD tymed;
  1402.     [switch_type(DWORD), switch_is((DWORD) tymed)]
  1403.         union
  1404.         {
  1405.         [case(TYMED_GDI)]
  1406.             HBITMAP hBitmap;
  1407.         [case(TYMED_MFPICT)]
  1408.             HMETAFILEPICT hMetaFilePict;
  1409.         [case(TYMED_ENHMF)]
  1410.             HENHMETAFILE hEnhMetaFile;
  1411.         [case(TYMED_HGLOBAL)]
  1412.             HGLOBAL hGlobal;
  1413.         [case(TYMED_FILE)]
  1414.             LPOLESTR lpszFileName;
  1415.         [case(TYMED_ISTREAM)]
  1416.             IStream *pstm;
  1417.         [case(TYMED_ISTORAGE)]
  1418.             IStorage *pstg;
  1419.         [default]
  1420.                 ;
  1421.         };
  1422.         [unique] IUnknown *pUnkForRelease;
  1423.     }uSTGMEDIUM;
  1424.  
  1425. cpp_quote("#endif /* !NONAMELESSUNION */")
  1426.  
  1427.  
  1428. //
  1429. //  wireSTGMEDIUM
  1430. //
  1431. // These flags are #defined (not enumerated) in wingdi.
  1432. // We need to repeat #defines to avoid conflict in the generated file.
  1433. //
  1434.  
  1435. /* Object Definitions for EnumObjects() */
  1436. #define OBJ_PEN             1
  1437. #define OBJ_BRUSH           2
  1438. #define OBJ_DC              3
  1439. #define OBJ_METADC          4
  1440. #define OBJ_PAL             5
  1441. #define OBJ_FONT            6
  1442. #define OBJ_BITMAP          7
  1443. #define OBJ_REGION          8
  1444. #define OBJ_METAFILE        9
  1445. #define OBJ_MEMDC           10
  1446. #define OBJ_EXTPEN          11
  1447. #define OBJ_ENHMETADC       12
  1448. #define OBJ_ENHMETAFILE     13
  1449.  
  1450.     typedef union _GDI_OBJECT switch( DWORD ObjectType ) u
  1451.     {
  1452.         case OBJ_BITMAP:    wireHBITMAP     hBitmap;
  1453.         case OBJ_PAL:       wireHPALETTE    hPalette;
  1454.         default:            wireHGLOBAL     hGeneric;
  1455.     } GDI_OBJECT;
  1456.  
  1457.     typedef struct _userSTGMEDIUM
  1458.     {
  1459.         union _STGMEDIUM_UNION switch( DWORD tymed ) u
  1460.         {
  1461.         case TYMED_NULL:        ;
  1462.         case TYMED_MFPICT:      wireHMETAFILEPICT   hMetaFilePict;
  1463.         case TYMED_ENHMF:       wireHENHMETAFILE    hHEnhMetaFile;
  1464.         case TYMED_GDI:         GDI_OBJECT *        hGdiHandle;
  1465.         case TYMED_HGLOBAL:     wireHGLOBAL         hGlobal;
  1466.         case TYMED_FILE:        LPOLESTR            lpszFileName;
  1467.         case TYMED_ISTREAM:     BYTE_BLOB *         pstm;
  1468.         case TYMED_ISTORAGE:    BYTE_BLOB *         pstg;
  1469.         };
  1470.         IUnknown *              pUnkForRelease;
  1471.     } userSTGMEDIUM;
  1472.  
  1473.     typedef [unique] userSTGMEDIUM  * wireSTGMEDIUM;
  1474.     typedef [wire_marshal( wireSTGMEDIUM )] uSTGMEDIUM STGMEDIUM;
  1475.  
  1476.     typedef [unique] userSTGMEDIUM  * wireASYNC_STGMEDIUM;
  1477.     typedef [wire_marshal( wireASYNC_STGMEDIUM )] STGMEDIUM ASYNC_STGMEDIUM;
  1478.  
  1479.     typedef STGMEDIUM *LPSTGMEDIUM;
  1480.  
  1481.     typedef struct _userFLAG_STGMEDIUM
  1482.     {
  1483.         long                ContextFlags;
  1484.         long                fPassOwnership;
  1485.         userSTGMEDIUM       Stgmed;
  1486.     } userFLAG_STGMEDIUM;
  1487.  
  1488.     typedef [unique] userFLAG_STGMEDIUM  * wireFLAG_STGMEDIUM;
  1489.  
  1490.     typedef [wire_marshal( wireFLAG_STGMEDIUM )]
  1491.         struct _FLAG_STGMEDIUM
  1492.         {
  1493.                 long                ContextFlags;
  1494.                 long                fPassOwnership;
  1495.                 STGMEDIUM           Stgmed;
  1496.         } FLAG_STGMEDIUM;
  1497.  
  1498.  
  1499.     [local]
  1500.     void OnDataChange(
  1501.         [in, unique] FORMATETC *pFormatetc,
  1502.         [in, unique] STGMEDIUM *pStgmed);
  1503.  
  1504.     [call_as(OnDataChange), async]
  1505.     void RemoteOnDataChange(
  1506.         [in, unique] FORMATETC *pFormatetc,
  1507.         [in, unique] ASYNC_STGMEDIUM *pStgmed);
  1508.  
  1509.     [local]
  1510.     void OnViewChange(
  1511.         [in] DWORD dwAspect,
  1512.         [in] LONG lindex);
  1513.  
  1514.     [call_as(OnViewChange), async]
  1515.     void RemoteOnViewChange(
  1516.         [in] DWORD dwAspect,
  1517.         [in] LONG lindex);
  1518.  
  1519.     [local]
  1520.     void OnRename(
  1521.         [in] IMoniker *pmk);
  1522.  
  1523.     [call_as(OnRename), async]
  1524.     void RemoteOnRename(
  1525.         [in] IMoniker *pmk);
  1526.  
  1527.     [local]
  1528.     void OnSave();
  1529.  
  1530.     [call_as(OnSave), async]
  1531.     void RemoteOnSave();
  1532.  
  1533.     [local]
  1534.     void OnClose();
  1535.  
  1536.     [call_as(OnClose)]
  1537.     HRESULT RemoteOnClose();
  1538. }
  1539.  
  1540. [
  1541.     object,
  1542.     uuid(00000125-0000-0000-C000-000000000046),
  1543.     pointer_default(unique)
  1544. ]
  1545.  
  1546. interface IAdviseSink2 : IAdviseSink
  1547. {
  1548.  
  1549.     typedef [unique] IAdviseSink2 *LPADVISESINK2;
  1550.  
  1551.     [local]
  1552.     void OnLinkSrcChange(
  1553.         [in, unique] IMoniker *pmk);
  1554.  
  1555.     [call_as(OnLinkSrcChange), async]
  1556.     void RemoteOnLinkSrcChange(
  1557.         [in, unique] IMoniker *pmk);
  1558. }
  1559.  
  1560. [
  1561.     object,
  1562.     uuid(0000010e-0000-0000-C000-000000000046),
  1563.     pointer_default(unique)
  1564. ]
  1565.  
  1566. interface IDataObject : IUnknown
  1567. {
  1568.  
  1569.     typedef [unique] IDataObject *LPDATAOBJECT;
  1570.  
  1571.     //DATA format DIRection
  1572.     typedef enum tagDATADIR
  1573.     {
  1574.         DATADIR_GET = 1,
  1575.         DATADIR_SET = 2
  1576.     } DATADIR;
  1577.  
  1578.     [local]
  1579.     HRESULT GetData(
  1580.         [in, unique] FORMATETC *pformatetcIn,
  1581.         [out] STGMEDIUM *pmedium);
  1582.  
  1583.     [call_as(GetData)]
  1584.     HRESULT RemoteGetData(
  1585.         [in, unique] FORMATETC *pformatetcIn,
  1586.         [out] STGMEDIUM *pRemoteMedium);
  1587.  
  1588.     [local]
  1589.     HRESULT GetDataHere(
  1590.         [in, unique] FORMATETC *pformatetc,
  1591.         [in, out] STGMEDIUM *pmedium);
  1592.  
  1593.     [call_as(GetDataHere)]
  1594.     HRESULT RemoteGetDataHere(
  1595.         [in, unique] FORMATETC *pformatetc,
  1596.         [in, out] STGMEDIUM *pRemoteMedium);
  1597.  
  1598.     HRESULT QueryGetData(
  1599.         [in, unique] FORMATETC *pformatetc);
  1600.  
  1601.  
  1602.     HRESULT GetCanonicalFormatEtc(
  1603.         [in, unique] FORMATETC *pformatectIn,
  1604.         [out] FORMATETC *pformatetcOut);
  1605.  
  1606.     [local]
  1607.     HRESULT SetData(
  1608.         [in, unique] FORMATETC *pformatetc,
  1609.         [in, unique] STGMEDIUM *pmedium,
  1610.         [in] BOOL fRelease);
  1611.  
  1612.     [call_as(SetData)]
  1613.     HRESULT RemoteSetData(
  1614.         [in, unique] FORMATETC *pformatetc,
  1615.         [in, unique] FLAG_STGMEDIUM *pmedium,
  1616.         [in] BOOL fRelease);
  1617.  
  1618.     HRESULT EnumFormatEtc(
  1619.         [in] DWORD dwDirection,
  1620.         [out] IEnumFORMATETC **ppenumFormatEtc);
  1621.  
  1622.     HRESULT DAdvise(
  1623.         [in] FORMATETC *pformatetc,
  1624.         [in] DWORD advf,
  1625.         [in, unique] IAdviseSink *pAdvSink,
  1626.         [out] DWORD *pdwConnection);
  1627.  
  1628.     HRESULT DUnadvise(
  1629.         [in] DWORD dwConnection);
  1630.  
  1631.     HRESULT EnumDAdvise(
  1632.         [out] IEnumSTATDATA **ppenumAdvise);
  1633.  
  1634. }
  1635.  
  1636. [
  1637.     local,
  1638.     object,
  1639.     uuid(00000110-0000-0000-C000-000000000046)
  1640. ]
  1641.  
  1642. interface IDataAdviseHolder : IUnknown
  1643. {
  1644.  
  1645.     typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
  1646.  
  1647.     HRESULT Advise
  1648.     (
  1649.         [in, unique] IDataObject *pDataObject,
  1650.         [in, unique] FORMATETC *pFetc,
  1651.         [in] DWORD advf,
  1652.         [in, unique] IAdviseSink *pAdvise,
  1653.         [out] DWORD *pdwConnection
  1654.     );
  1655.  
  1656.     HRESULT Unadvise
  1657.     (
  1658.         [in] DWORD dwConnection
  1659.     );
  1660.  
  1661.     HRESULT EnumAdvise
  1662.     (
  1663.         [out] IEnumSTATDATA **ppenumAdvise
  1664.     );
  1665.  
  1666.     HRESULT SendOnDataChange
  1667.     (
  1668.         [in, unique] IDataObject *pDataObject,
  1669.         [in] DWORD dwReserved,
  1670.         [in] DWORD advf
  1671.     );
  1672.  
  1673. }
  1674.  
  1675. [
  1676.     local,
  1677.     object,
  1678.     uuid(00000016-0000-0000-C000-000000000046)
  1679. ]
  1680.  
  1681. interface IMessageFilter : IUnknown
  1682. {
  1683.  
  1684.     typedef [unique] IMessageFilter *LPMESSAGEFILTER;
  1685.  
  1686. // call type used by IMessageFilter::HandleIncomingMessage
  1687. typedef enum tagCALLTYPE
  1688. {
  1689.     CALLTYPE_TOPLEVEL = 1,      // toplevel call - no outgoing call
  1690.     CALLTYPE_NESTED   = 2,      // callback on behalf of previous outgoing call - should always handle
  1691.     CALLTYPE_ASYNC    = 3,      // aysnchronous call - can NOT be rejected
  1692.     CALLTYPE_TOPLEVEL_CALLPENDING = 4,  // new toplevel call with new LID
  1693.     CALLTYPE_ASYNC_CALLPENDING    = 5   // async call - can NOT be rejected
  1694. } CALLTYPE;
  1695.  
  1696. // status of server call - returned by IMessageFilter::HandleIncomingCall
  1697. // and passed to  IMessageFilter::RetryRejectedCall
  1698. typedef enum tagSERVERCALL
  1699. {
  1700.     SERVERCALL_ISHANDLED    = 0,
  1701.     SERVERCALL_REJECTED     = 1,
  1702.     SERVERCALL_RETRYLATER   = 2
  1703. } SERVERCALL;
  1704.  
  1705. // Pending type indicates the level of nesting
  1706. typedef enum tagPENDINGTYPE
  1707. {
  1708.     PENDINGTYPE_TOPLEVEL = 1, // toplevel call
  1709.     PENDINGTYPE_NESTED   = 2  // nested call
  1710. } PENDINGTYPE;
  1711.  
  1712. // return values of MessagePending
  1713. typedef enum tagPENDINGMSG
  1714. {
  1715.     PENDINGMSG_CANCELCALL  = 0, // cancel the outgoing call
  1716.     PENDINGMSG_WAITNOPROCESS  = 1, // wait for the return and don't dispatch the message
  1717.     PENDINGMSG_WAITDEFPROCESS = 2  // wait and dispatch the message
  1718.  
  1719. } PENDINGMSG;
  1720.  
  1721. // additional interface information about the incoming call
  1722. typedef struct tagINTERFACEINFO
  1723. {
  1724.     IUnknown    *pUnk;      // the pointer to the object
  1725.     IID         iid;        // interface id
  1726.     WORD        wMethod;    // interface method
  1727. } INTERFACEINFO, *LPINTERFACEINFO;
  1728.  
  1729.     DWORD HandleInComingCall
  1730.     (
  1731.         [in] DWORD dwCallType,
  1732.         [in] HTASK htaskCaller,
  1733.         [in] DWORD dwTickCount,
  1734.         [in] LPINTERFACEINFO lpInterfaceInfo
  1735.     );
  1736.  
  1737.     DWORD RetryRejectedCall
  1738.     (
  1739.         [in] HTASK htaskCallee,
  1740.         [in] DWORD dwTickCount,
  1741.         [in] DWORD dwRejectType
  1742.     );
  1743.  
  1744.     DWORD MessagePending
  1745.     (
  1746.         [in] HTASK htaskCallee,
  1747.         [in] DWORD dwTickCount,
  1748.         [in] DWORD dwPendingType
  1749.     );
  1750. }
  1751.  
  1752.  
  1753. /****************************************************************************
  1754.  *  Object Remoting Interfaces
  1755.  ****************************************************************************/
  1756.  
  1757. [
  1758.     local,
  1759.     object,
  1760.     uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
  1761. ]
  1762. interface IRpcChannelBuffer : IUnknown
  1763. {
  1764.  
  1765.     typedef unsigned long RPCOLEDATAREP;
  1766.  
  1767.     typedef struct tagRPCOLEMESSAGE
  1768.     {
  1769.         void             *reserved1;
  1770.         RPCOLEDATAREP     dataRepresentation;
  1771.         void             *Buffer;
  1772.         ULONG             cbBuffer;
  1773.         ULONG             iMethod;
  1774.         void             *reserved2[5];
  1775.         ULONG             rpcFlags;
  1776.     } RPCOLEMESSAGE;
  1777.  
  1778.     typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
  1779.  
  1780.     HRESULT GetBuffer
  1781.     (
  1782.         [in] RPCOLEMESSAGE *pMessage,
  1783.         [in] REFIID riid
  1784.     );
  1785.  
  1786.     HRESULT SendReceive
  1787.     (
  1788.         [in,out] RPCOLEMESSAGE *pMessage,
  1789.         [out] ULONG *pStatus
  1790.     );
  1791.  
  1792.     HRESULT FreeBuffer
  1793.     (
  1794.         [in] RPCOLEMESSAGE *pMessage
  1795.     );
  1796.  
  1797.     HRESULT GetDestCtx
  1798.     (
  1799.         [out] DWORD *pdwDestContext,
  1800.         [out] void **ppvDestContext
  1801.     );
  1802.  
  1803.     HRESULT IsConnected
  1804.     (
  1805.         void
  1806.     );
  1807.  
  1808. }
  1809.  
  1810. [
  1811.     local,
  1812.     object,
  1813.     uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
  1814. ]
  1815. interface IRpcProxyBuffer : IUnknown
  1816. {
  1817.  
  1818.     HRESULT Connect
  1819.     (
  1820.         [in, unique] IRpcChannelBuffer *pRpcChannelBuffer
  1821.     );
  1822.  
  1823.     void Disconnect
  1824.     (
  1825.         void
  1826.     );
  1827.  
  1828. }
  1829.  
  1830. [
  1831.     local,
  1832.     object,
  1833.     uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
  1834. ]
  1835. interface IRpcStubBuffer : IUnknown
  1836. {
  1837.  
  1838.     HRESULT Connect
  1839.     (
  1840.         [in] IUnknown *pUnkServer
  1841.     );
  1842.  
  1843.     void Disconnect();
  1844.  
  1845.     HRESULT Invoke
  1846.     (
  1847.         [in] RPCOLEMESSAGE *_prpcmsg,
  1848.         [in] IRpcChannelBuffer *_pRpcChannelBuffer
  1849.     );
  1850.  
  1851.     IRpcStubBuffer *IsIIDSupported
  1852.     (
  1853.         [in] REFIID riid
  1854.     );
  1855.  
  1856.     ULONG CountRefs
  1857.     (
  1858.         void
  1859.     );
  1860.  
  1861.     HRESULT DebugServerQueryInterface
  1862.     (
  1863.         void **ppv
  1864.     );
  1865.  
  1866.     void DebugServerRelease
  1867.     (
  1868.         void *pv
  1869.     );
  1870.  
  1871. }
  1872.  
  1873.  
  1874.  
  1875. [
  1876.     local,
  1877.     object,
  1878.     uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
  1879. ]
  1880. interface IPSFactoryBuffer : IUnknown
  1881. {
  1882.  
  1883.     HRESULT CreateProxy
  1884.     (
  1885.         [in] IUnknown *pUnkOuter,
  1886.         [in] REFIID riid,
  1887.         [out] IRpcProxyBuffer **ppProxy,
  1888.         [out] void **ppv
  1889.     );
  1890.  
  1891.     HRESULT CreateStub
  1892.     (
  1893.         [in] REFIID riid,
  1894.         [in, unique] IUnknown *pUnkServer,
  1895.         [out] IRpcStubBuffer **ppStub
  1896.     );
  1897. }
  1898.  
  1899. cpp_quote( "#if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM" )
  1900. cpp_quote( "// This interface is only valid on Windows NT 4.0" )
  1901.  
  1902. [
  1903.     local,
  1904.     object,
  1905.     uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
  1906. ]
  1907. interface IChannelHook : IUnknown
  1908. {
  1909.     void ClientGetSize(
  1910.         [in]  REFGUID uExtent,
  1911.         [in]  REFIID  riid,
  1912.         [out] ULONG  *pDataSize );
  1913.  
  1914.     void ClientFillBuffer(
  1915.         [in]      REFGUID uExtent,
  1916.         [in]      REFIID  riid,
  1917.         [in, out] ULONG  *pDataSize,
  1918.         [in]      void   *pDataBuffer );
  1919.  
  1920.     void ClientNotify(
  1921.         [in] REFGUID uExtent,
  1922.         [in] REFIID  riid,
  1923.         [in] ULONG   cbDataSize,
  1924.         [in] void   *pDataBuffer,
  1925.         [in] DWORD   lDataRep,
  1926.         [in] HRESULT hrFault );
  1927.  
  1928.     void ServerNotify(
  1929.         [in] REFGUID uExtent,
  1930.         [in] REFIID  riid,
  1931.         [in] ULONG   cbDataSize,
  1932.         [in] void   *pDataBuffer,
  1933.         [in] DWORD   lDataRep );
  1934.  
  1935.     void ServerGetSize(
  1936.         [in]  REFGUID uExtent,
  1937.         [in]  REFIID  riid,
  1938.         [in]  HRESULT hrFault,
  1939.         [out] ULONG  *pDataSize );
  1940.  
  1941.     void ServerFillBuffer(
  1942.         [in]      REFGUID uExtent,
  1943.         [in]      REFIID  riid,
  1944.         [in, out] ULONG  *pDataSize,
  1945.         [in]      void   *pDataBuffer,
  1946.         [in]      HRESULT hrFault );
  1947. };
  1948.  
  1949. cpp_quote( "#endif //DCOM" )
  1950.  
  1951. /****************************************************************************
  1952.  *  Property Storage Interfaces
  1953.  ****************************************************************************/
  1954.  
  1955. interface IEnumSTATPROPSTG;
  1956. interface IEnumSTATPROPSETSTG;
  1957.  
  1958. [
  1959.     object,
  1960.     uuid(00000138-0000-0000-C000-000000000046),
  1961.     pointer_default(unique)
  1962. ]
  1963.  
  1964. interface IPropertyStorage : IUnknown
  1965. {
  1966.  
  1967.     cpp_quote("")
  1968.     cpp_quote("// Well-known Property Set Format IDs")
  1969.     extern const FMTID FMTID_SummaryInformation;
  1970.     extern const FMTID FMTID_DocSummaryInformation;
  1971.     extern const FMTID FMTID_UserDefinedProperties;
  1972.  
  1973.     cpp_quote("")
  1974.     cpp_quote("// Flags for IPropertySetStorage::Create")
  1975.     const DWORD PROPSETFLAG_DEFAULT = 0;
  1976.     const DWORD PROPSETFLAG_NONSIMPLE = 1;
  1977.     const DWORD PROPSETFLAG_ANSI = 2;
  1978.  
  1979.     typedef [unique] IPropertyStorage * LPPROPERTYSTORAGE;
  1980.  
  1981.     typedef struct tagPROPVARIANT PROPVARIANT;
  1982.  
  1983.     #define TYPEDEF_CA(type, name) \
  1984.         typedef struct tag##name\
  1985.         {\
  1986.             ULONG   cElems;\
  1987.             [size_is( cElems )]\
  1988.             type *  pElems;\
  1989.         } name
  1990.  
  1991.     TYPEDEF_CA(unsigned char,       CAUB);
  1992.     TYPEDEF_CA(short,               CAI);
  1993.     TYPEDEF_CA(USHORT,              CAUI);
  1994.     TYPEDEF_CA(long,                CAL);
  1995.     TYPEDEF_CA(ULONG,               CAUL);
  1996.     TYPEDEF_CA(float,               CAFLT);
  1997.     TYPEDEF_CA(double,              CADBL);
  1998.     TYPEDEF_CA(CY,                  CACY);
  1999.     TYPEDEF_CA(DATE,                CADATE);
  2000.     TYPEDEF_CA(BSTR,                CABSTR);
  2001.     TYPEDEF_CA(VARIANT_BOOL,        CABOOL);
  2002.     TYPEDEF_CA(SCODE,               CASCODE);
  2003.     TYPEDEF_CA(PROPVARIANT,         CAPROPVARIANT);
  2004.     TYPEDEF_CA(LARGE_INTEGER,       CAH);
  2005.     TYPEDEF_CA(ULARGE_INTEGER,      CAUH);
  2006.     TYPEDEF_CA(LPSTR,               CALPSTR);
  2007.     TYPEDEF_CA(LPWSTR,              CALPWSTR);
  2008.     TYPEDEF_CA(FILETIME,            CAFILETIME);
  2009.     TYPEDEF_CA(CLIPDATA,            CACLIPDATA);
  2010.     TYPEDEF_CA(CLSID,               CACLSID);
  2011.  
  2012. cpp_quote("// Disable the warning about the obsolete member named 'bool'")
  2013. cpp_quote("// 'bool', 'true', 'false', 'mutable', 'explicit', & 'typename'")
  2014. cpp_quote("// are reserved keywords")
  2015. cpp_quote("#pragma warning(disable:4237)")
  2016.  
  2017.     struct tagPROPVARIANT
  2018.     {
  2019.         VARTYPE vt;
  2020.         WORD    wReserved1;
  2021.         WORD    wReserved2;
  2022.         WORD    wReserved3;
  2023.         [switch_is((unsigned short) (vt & 0x1fff))] union
  2024.         {
  2025.             [case(VT_EMPTY, VT_NULL)]
  2026.                 ;
  2027.             [case(VT_UI1)]
  2028.                 UCHAR               bVal;
  2029.             [case(VT_I2)]
  2030.                 short               iVal;
  2031.             [case(VT_UI2)]
  2032.                 USHORT              uiVal;
  2033.             [case(VT_BOOL)]
  2034.                 VARIANT_BOOL        boolVal;
  2035.             [case(VT_ILLEGAL)]  // obsolete field name; use boolVal
  2036.                 _VARIANT_BOOL        bool;
  2037.             [case(VT_I4)]
  2038.                 long                lVal;
  2039.             [case(VT_UI4)]
  2040.                 ULONG               ulVal;
  2041.             [case(VT_R4)]
  2042.                 float               fltVal;
  2043.             [case(VT_ERROR)]
  2044.                 SCODE               scode;
  2045.             [case(VT_I8)]
  2046.                 LARGE_INTEGER       hVal;
  2047.             [case(VT_UI8)]
  2048.                 ULARGE_INTEGER      uhVal;
  2049.             [case(VT_R8)]
  2050.                 double              dblVal;
  2051.             [case(VT_CY)]
  2052.                 CY                  cyVal;
  2053.             [case(VT_DATE)]
  2054.                 DATE                date;
  2055.             [case(VT_FILETIME)]
  2056.                 FILETIME            filetime;
  2057.             [case(VT_CLSID)]
  2058.                 CLSID *             puuid;
  2059.             [case(VT_BLOB, VT_BLOB_OBJECT)]
  2060.                 BLOB                blob;
  2061.             [case(VT_CF)]
  2062.                 CLIPDATA            *pclipdata;
  2063.             [case(VT_STREAM, VT_STREAMED_OBJECT)]
  2064.                 IStream *           pStream;
  2065.             [case(VT_STORAGE, VT_STORED_OBJECT)]
  2066.                 IStorage *          pStorage;
  2067.             [case(VT_BSTR)]
  2068.                 BSTR                bstrVal;
  2069.             [case(VT_LPSTR)]
  2070.                 LPSTR               pszVal;
  2071.             [case(VT_LPWSTR)]
  2072.                 LPWSTR              pwszVal;
  2073.             [case(VT_UI1|VT_VECTOR)]
  2074.                 CAUB                caub;
  2075.             [case(VT_I2|VT_VECTOR)]
  2076.                 CAI                 cai;
  2077.             [case(VT_UI2|VT_VECTOR)]
  2078.                 CAUI                caui;
  2079.             [case(VT_BOOL|VT_VECTOR)]
  2080.                 CABOOL              cabool;
  2081.             [case(VT_I4|VT_VECTOR)]
  2082.                 CAL                 cal;
  2083.             [case(VT_UI4|VT_VECTOR)]
  2084.                 CAUL                caul;
  2085.             [case(VT_R4|VT_VECTOR)]
  2086.                 CAFLT               caflt;
  2087.             [case(VT_ERROR|VT_VECTOR)]
  2088.                 CASCODE             cascode;
  2089.             [case(VT_I8|VT_VECTOR)]
  2090.                 CAH                 cah;
  2091.             [case(VT_UI8|VT_VECTOR)]
  2092.                 CAUH                cauh;
  2093.             [case(VT_R8|VT_VECTOR)]
  2094.                 CADBL               cadbl;
  2095.             [case(VT_CY|VT_VECTOR)]
  2096.                 CACY                cacy;
  2097.             [case(VT_DATE|VT_VECTOR)]
  2098.                 CADATE              cadate;
  2099.             [case(VT_FILETIME|VT_VECTOR)]
  2100.                 CAFILETIME          cafiletime;
  2101.             [case(VT_CLSID|VT_VECTOR)]
  2102.                 CACLSID             cauuid;
  2103.             [case(VT_CF|VT_VECTOR)]
  2104.                 CACLIPDATA          caclipdata;
  2105.             [case(VT_BSTR|VT_VECTOR)]
  2106.                 CABSTR              cabstr;
  2107.             [case(VT_LPSTR|VT_VECTOR)]
  2108.                 CALPSTR             calpstr;
  2109.             [case(VT_LPWSTR|VT_VECTOR)]
  2110.                 CALPWSTR            calpwstr;
  2111.             [case(VT_VARIANT|VT_VECTOR)]
  2112.                 CAPROPVARIANT       capropvar;
  2113.         };
  2114.     };
  2115.  
  2116.  
  2117.     typedef struct tagPROPVARIANT * LPPROPVARIANT;
  2118.  
  2119.     cpp_quote("// Reserved global Property IDs")
  2120.     const PROPID PID_DICTIONARY         = 0x00000000;
  2121.     const PROPID PID_CODEPAGE           = 0x00000001;
  2122.     const PROPID PID_FIRST_USABLE       = 0x00000002;
  2123.     const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
  2124.     const PROPID PID_LOCALE             = 0x80000000;
  2125.     const PROPID PID_MODIFY_TIME        = 0x80000001;
  2126.     const PROPID PID_SECURITY           = 0x80000002;
  2127.     const PROPID PID_ILLEGAL            = 0xffffffff;
  2128.  
  2129.  
  2130.     cpp_quote("// Property IDs for the SummaryInformation Property Set")
  2131.     cpp_quote("")
  2132.     cpp_quote("#define PIDSI_TITLE               0x00000002L  // VT_LPSTR")
  2133.     cpp_quote("#define PIDSI_SUBJECT             0x00000003L  // VT_LPSTR")
  2134.     cpp_quote("#define PIDSI_AUTHOR              0x00000004L  // VT_LPSTR")
  2135.     cpp_quote("#define PIDSI_KEYWORDS            0x00000005L  // VT_LPSTR")
  2136.     cpp_quote("#define PIDSI_COMMENTS            0x00000006L  // VT_LPSTR")
  2137.     cpp_quote("#define PIDSI_TEMPLATE            0x00000007L  // VT_LPSTR")
  2138.     cpp_quote("#define PIDSI_LASTAUTHOR          0x00000008L  // VT_LPSTR")
  2139.     cpp_quote("#define PIDSI_REVNUMBER           0x00000009L  // VT_LPSTR")
  2140.     cpp_quote("#define PIDSI_EDITTIME            0x0000000aL  // VT_FILETIME (UTC)")
  2141.     cpp_quote("#define PIDSI_LASTPRINTED         0x0000000bL  // VT_FILETIME (UTC)")
  2142.     cpp_quote("#define PIDSI_CREATE_DTM          0x0000000cL  // VT_FILETIME (UTC)")
  2143.     cpp_quote("#define PIDSI_LASTSAVE_DTM        0x0000000dL  // VT_FILETIME (UTC)")
  2144.     cpp_quote("#define PIDSI_PAGECOUNT           0x0000000eL  // VT_I4")
  2145.     cpp_quote("#define PIDSI_WORDCOUNT           0x0000000fL  // VT_I4")
  2146.     cpp_quote("#define PIDSI_CHARCOUNT           0x00000010L  // VT_I4")
  2147.     cpp_quote("#define PIDSI_THUMBNAIL           0x00000011L  // VT_CF")
  2148.     cpp_quote("#define PIDSI_APPNAME             0x00000012L  // VT_LPSTR")
  2149.     cpp_quote("#define PIDSI_DOC_SECURITY        0x00000013L  // VT_I4")
  2150.  
  2151.     const ULONG PRSPEC_INVALID = 0xffffffff;
  2152.     const ULONG PRSPEC_LPWSTR = 0;
  2153.     const ULONG PRSPEC_PROPID = 1;
  2154.  
  2155.     typedef struct tagPROPSPEC
  2156.     {
  2157.  
  2158.         ULONG   ulKind;
  2159.         [switch_is(ulKind)] union
  2160.         {
  2161.             [case(PRSPEC_PROPID)]
  2162.                 PROPID      propid;
  2163.             [case(PRSPEC_LPWSTR)]
  2164.                 LPOLESTR    lpwstr;
  2165.             [default] ;
  2166.         } ;
  2167.  
  2168.     } PROPSPEC;
  2169.  
  2170.     typedef struct tagSTATPROPSTG
  2171.     {
  2172.  
  2173.         LPOLESTR    lpwstrName;
  2174.         PROPID      propid;
  2175.         VARTYPE     vt;
  2176.  
  2177.     } STATPROPSTG;
  2178.  
  2179.     cpp_quote("// Macros for parsing the OS Version of the Property Set Header")
  2180.     cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )")
  2181.     cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))")
  2182.     cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))")
  2183.     cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF")
  2184.  
  2185.  
  2186.     typedef struct tagSTATPROPSETSTG
  2187.     {
  2188.  
  2189.         FMTID       fmtid;
  2190.         CLSID       clsid;
  2191.         DWORD       grfFlags;
  2192.         FILETIME    mtime;
  2193.         FILETIME    ctime;
  2194.         FILETIME    atime;
  2195.         DWORD       dwOSVersion;
  2196.  
  2197.     } STATPROPSETSTG;
  2198.  
  2199.  
  2200.  
  2201.     HRESULT ReadMultiple(
  2202.         [in]    ULONG                   cpspec,
  2203.         [in, size_is(cpspec)]
  2204.                 const PROPSPEC          rgpspec[],
  2205.         [out, size_is(cpspec)]
  2206.                 PROPVARIANT             rgpropvar[]
  2207.         );
  2208.  
  2209.     HRESULT WriteMultiple(
  2210.         [in]    ULONG                   cpspec,
  2211.         [in, size_is(cpspec)]
  2212.                 const PROPSPEC          rgpspec[],
  2213.         [in, size_is(cpspec)]
  2214.                 const PROPVARIANT       rgpropvar[],
  2215.         [in]    PROPID                  propidNameFirst
  2216.         );
  2217.  
  2218.     HRESULT DeleteMultiple(
  2219.         [in]    ULONG                   cpspec,
  2220.         [in, size_is(cpspec)]
  2221.                 const PROPSPEC          rgpspec[]
  2222.         );
  2223.  
  2224.     HRESULT ReadPropertyNames(
  2225.         [in]    ULONG                   cpropid,
  2226.         [in, size_is(cpropid)]
  2227.                 const PROPID            rgpropid[],
  2228.         [out, size_is(cpropid)]
  2229.                 LPOLESTR                rglpwstrName[]
  2230.         );
  2231.  
  2232.     HRESULT WritePropertyNames(
  2233.         [in]    ULONG                   cpropid,
  2234.         [in, size_is(cpropid)]
  2235.                 const PROPID            rgpropid[],
  2236.         [in, size_is(cpropid)]
  2237.                 const LPOLESTR          rglpwstrName[]
  2238.         );
  2239.  
  2240.     HRESULT DeletePropertyNames(
  2241.         [in]    ULONG                   cpropid,
  2242.         [in, size_is(cpropid)]
  2243.                 const PROPID            rgpropid[]
  2244.         );
  2245.  
  2246.     HRESULT Commit(
  2247.         [in]    DWORD                   grfCommitFlags
  2248.         );
  2249.  
  2250.     HRESULT Revert();
  2251.  
  2252.     HRESULT Enum(
  2253.         [out]   IEnumSTATPROPSTG **     ppenum
  2254.         );
  2255.  
  2256.     HRESULT SetTimes(
  2257.         [in]    FILETIME const *        pctime,
  2258.         [in]    FILETIME const *        patime,
  2259.         [in]    FILETIME const *        pmtime
  2260.         );
  2261.  
  2262.     HRESULT SetClass(
  2263.         [in]    REFCLSID                clsid
  2264.         );
  2265.  
  2266.     HRESULT Stat(
  2267.         [out]   STATPROPSETSTG *        pstatpsstg
  2268.         );
  2269. }
  2270.  
  2271.  
  2272. [
  2273.     object,
  2274.     uuid(0000013A-0000-0000-C000-000000000046),
  2275.     pointer_default(unique)
  2276. ]
  2277.  
  2278. interface IPropertySetStorage : IUnknown
  2279. {
  2280.  
  2281.     typedef [unique] IPropertySetStorage * LPPROPERTYSETSTORAGE;
  2282.  
  2283.     HRESULT Create(
  2284.         [in]    REFFMTID                rfmtid,
  2285.         [in, unique]
  2286.                 const CLSID *           pclsid,
  2287.         [in]    DWORD                   grfFlags,
  2288.         [in]    DWORD                   grfMode,
  2289.         [out]   IPropertyStorage **     ppprstg
  2290.         );
  2291.  
  2292.     HRESULT Open(
  2293.         [in]    REFFMTID                rfmtid,
  2294.         [in]    DWORD                   grfMode,
  2295.         [out]   IPropertyStorage **     ppprstg
  2296.         );
  2297.  
  2298.     HRESULT Delete(
  2299.         [in]    REFFMTID                rfmtid
  2300.         );
  2301.  
  2302.     HRESULT Enum(
  2303.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2304.         );
  2305.  
  2306. }
  2307.  
  2308.  
  2309. [
  2310.     object,
  2311.     uuid(00000139-0000-0000-C000-000000000046),
  2312.     pointer_default(unique)
  2313. ]
  2314.  
  2315. interface IEnumSTATPROPSTG : IUnknown
  2316. {
  2317.  
  2318.     typedef [unique] IEnumSTATPROPSTG * LPENUMSTATPROPSTG;
  2319.  
  2320.     [local]
  2321.     HRESULT Next(
  2322.         [in]    ULONG                   celt,
  2323.         [out, size_is(celt), length_is(*pceltFetched)]
  2324.                 STATPROPSTG *           rgelt,
  2325.         [out]   ULONG *                 pceltFetched
  2326.         );
  2327.  
  2328.     [call_as(Next)]
  2329.     HRESULT RemoteNext(
  2330.         [in]    ULONG                   celt,
  2331.         [out, size_is(celt), length_is(*pceltFetched)]
  2332.                 STATPROPSTG *           rgelt,
  2333.         [out]   ULONG *                 pceltFetched
  2334.         );
  2335.  
  2336.     HRESULT Skip(
  2337.         [in]    ULONG                   celt
  2338.         );
  2339.  
  2340.     HRESULT Reset();
  2341.  
  2342.     HRESULT Clone(
  2343.         [out]   IEnumSTATPROPSTG **     ppenum
  2344.         );
  2345. }
  2346.  
  2347.  
  2348. [
  2349.     object,
  2350.     uuid(0000013B-0000-0000-C000-000000000046),
  2351.     pointer_default(unique)
  2352. ]
  2353.  
  2354. interface IEnumSTATPROPSETSTG : IUnknown
  2355. {
  2356.  
  2357.     typedef [unique] IEnumSTATPROPSETSTG * LPENUMSTATPROPSETSTG;
  2358.  
  2359.     [local]
  2360.     HRESULT Next(
  2361.         [in]    ULONG                   celt,
  2362.         [out, size_is(celt), length_is(*pceltFetched)]
  2363.                 STATPROPSETSTG *        rgelt,
  2364.         [out]   ULONG *                 pceltFetched
  2365.         );
  2366.  
  2367.     [call_as(Next)]
  2368.     HRESULT RemoteNext(
  2369.         [in]    ULONG                   celt,
  2370.         [out, size_is(celt), length_is(*pceltFetched)]
  2371.                 STATPROPSETSTG *        rgelt,
  2372.         [out]   ULONG *                 pceltFetched
  2373.         );
  2374.  
  2375.     HRESULT Skip(
  2376.         [in]    ULONG                   celt
  2377.         );
  2378.  
  2379.     HRESULT Reset();
  2380.  
  2381.     HRESULT Clone(
  2382.         [out]   IEnumSTATPROPSETSTG **  ppenum
  2383.         );
  2384. }
  2385.  
  2386. cpp_quote("WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );")
  2387. cpp_quote("WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );")
  2388. cpp_quote("#   ifdef __cplusplus")
  2389. cpp_quote("inline void PropVariantInit ( PROPVARIANT * pvar )")
  2390. cpp_quote("{")
  2391. cpp_quote("    memset ( pvar, 0, sizeof(PROPVARIANT) );")
  2392. cpp_quote("}")
  2393. cpp_quote("#   else")
  2394. cpp_quote("#   define PropVariantInit(pvar) memset ( pvar, 0, sizeof(PROPVARIANT) )")
  2395. cpp_quote("#   endif")
  2396. cpp_quote("WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );")
  2397.  
  2398.  
  2399. /****************************************************************************
  2400.  *  Connection Point Interfaces
  2401.  ****************************************************************************/
  2402. #ifdef __INCLUDE_CPIFS
  2403. interface IConnectionPointContainer;
  2404. interface IConnectionPoint;
  2405. interface IEnumConnections;
  2406. interface IEnumConnectionPoints;
  2407.  
  2408. [
  2409.     object,
  2410.     uuid(B196B286-BAB4-101A-B69C-00AA00341D07),
  2411.     pointer_default(unique)
  2412. ]
  2413. interface IConnectionPoint : IUnknown
  2414. {
  2415.     typedef IConnectionPoint * PCONNECTIONPOINT;
  2416.     typedef IConnectionPoint * LPCONNECTIONPOINT;
  2417.  
  2418.     HRESULT GetConnectionInterface
  2419.     (
  2420.         [out]           IID * piid
  2421.     );
  2422.  
  2423.     HRESULT GetConnectionPointContainer
  2424.     (
  2425.         [out]           IConnectionPointContainer ** ppCPC
  2426.     );
  2427.  
  2428.     HRESULT Advise
  2429.     (
  2430.         [in]    IUnknown * pUnkSink,
  2431.         [out]   DWORD *    pdwCookie
  2432.     );
  2433.  
  2434.     HRESULT Unadvise
  2435.     (
  2436.         [in]    DWORD dwCookie
  2437.     );
  2438.  
  2439.     HRESULT EnumConnections
  2440.     (
  2441.         [out]   IEnumConnections ** ppEnum
  2442.     );
  2443. }
  2444.  
  2445. [
  2446.     object,
  2447.     uuid(B196B284-BAB4-101A-B69C-00AA00341D07),
  2448.     pointer_default(unique)
  2449. ]
  2450. interface IConnectionPointContainer : IUnknown
  2451. {
  2452.     typedef IConnectionPointContainer * PCONNECTIONPOINTCONTAINER;
  2453.     typedef IConnectionPointContainer * LPCONNECTIONPOINTCONTAINER;
  2454.  
  2455.     HRESULT EnumConnectionPoints
  2456.     (
  2457.         [out]   IEnumConnectionPoints ** ppEnum
  2458.     );
  2459.  
  2460.     HRESULT FindConnectionPoint
  2461.     (
  2462.         [in]    REFIID riid,
  2463.         [out]   IConnectionPoint ** ppCP
  2464.     );
  2465. }
  2466.  
  2467.  
  2468. [
  2469.     object,
  2470.     uuid(B196B287-BAB4-101A-B69C-00AA00341D07),
  2471.     pointer_default(unique)
  2472. ]
  2473. interface IEnumConnections : IUnknown
  2474. {
  2475.     typedef IEnumConnections * PENUMCONNECTIONS;
  2476.     typedef IEnumConnections * LPENUMCONNECTIONS;
  2477.  
  2478.     typedef struct tagCONNECTDATA
  2479.     {
  2480.         IUnknown *  pUnk;
  2481.         DWORD       dwCookie;
  2482.     } CONNECTDATA;
  2483.  
  2484.     typedef struct tagCONNECTDATA * PCONNECTDATA;
  2485.     typedef struct tagCONNECTDATA * LPCONNECTDATA;
  2486.  
  2487.     [local]
  2488.     HRESULT Next(
  2489.         [in]                        ULONG           cConnections,
  2490.         [out,
  2491.          size_is(cConnections),
  2492.          length_is(*lpcFetched)]    CONNECTDATA *   rgcd,
  2493.         [out]                       ULONG *         lpcFetched
  2494.     );
  2495.  
  2496.     [call_as(Next)]
  2497.     HRESULT RemoteNext(
  2498.         [in]                            ULONG           cConnections,
  2499.         [out,
  2500.          size_is(cConnections),
  2501.          length_is(*lpcFetched)]        CONNECTDATA *   rgcd,
  2502.         [out]                           ULONG *         lpcFetched
  2503.     );
  2504.  
  2505.     HRESULT Skip
  2506.     (
  2507.         [in]    ULONG cConnections
  2508.     );
  2509.  
  2510.     HRESULT Reset
  2511.     (
  2512.         void
  2513.     );
  2514.  
  2515.     HRESULT Clone
  2516.     (
  2517.         [out]   IEnumConnections ** ppEnum
  2518.     );
  2519. }
  2520.  
  2521.  
  2522. [
  2523.     object,
  2524.     uuid(B196B285-BAB4-101A-B69C-00AA00341D07),
  2525.     pointer_default(unique)
  2526. ]
  2527. interface IEnumConnectionPoints : IUnknown
  2528. {
  2529.     typedef IEnumConnectionPoints * PENUMCONNECTIONPOINTS;
  2530.     typedef IEnumConnectionPoints * LPENUMCONNECTIONPOINTS;
  2531.  
  2532.     [local]
  2533.     HRESULT Next(
  2534.         [in]                        ULONG               cConnections,
  2535.         [out,
  2536.          size_is(cConnections),
  2537.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2538.         [out]                       ULONG *             lpcFetched
  2539.     );
  2540.  
  2541.     [call_as(Next)]
  2542.     HRESULT RemoteNext(
  2543.         [in]                        ULONG               cConnections,
  2544.         [out,
  2545.          size_is(cConnections),
  2546.          length_is(*lpcFetched)]    IConnectionPoint ** rgpcn,
  2547.         [out]                       ULONG *             lpcFetched
  2548.     );
  2549.  
  2550.     HRESULT Skip
  2551.     (
  2552.         [in]    ULONG   cConnections
  2553.     );
  2554.  
  2555.     HRESULT Reset
  2556.     (
  2557.         void
  2558.     );
  2559.  
  2560.     HRESULT Clone
  2561.     (
  2562.         [out]   IEnumConnectionPoints **    ppEnum
  2563.     );
  2564. }
  2565. #endif // __INCLUDE_CPIFS
  2566.  
  2567.  
  2568. cpp_quote( "#if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM" )
  2569. cpp_quote( "// This interface is only valid on Windows NT 4.0" )
  2570.  
  2571. [
  2572.     local,
  2573.     object,
  2574.     uuid(0000013D-0000-0000-C000-000000000046)
  2575. ]
  2576. interface IClientSecurity : IUnknown
  2577. {
  2578.  
  2579.     typedef struct tagSOLE_AUTHENTICATION_SERVICE
  2580.     {
  2581.         DWORD    dwAuthnSvc;
  2582.         DWORD    dwAuthzSvc;
  2583.         OLECHAR *pPrincipalName;
  2584.         HRESULT  hr;
  2585.     } SOLE_AUTHENTICATION_SERVICE;
  2586.  
  2587.     typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
  2588.  
  2589.     typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES
  2590.     {
  2591.         EOAC_NONE           = 0x0,
  2592.         EOAC_MUTUAL_AUTH    = 0x1,
  2593.  
  2594.         // These are only valid for CoInitializeSecurity
  2595.         EOAC_SECURE_REFS    = 0x2,
  2596.         EOAC_ACCESS_CONTROL = 0x4
  2597.     } EOLE_AUTHENTICATION_CAPABILITIES;
  2598.  
  2599.     HRESULT QueryBlanket
  2600.     (
  2601.         [in]  IUnknown                *pProxy,
  2602.         [out] DWORD                   *pAuthnSvc,
  2603.         [out] DWORD                   *pAuthzSvc,
  2604.         [out] OLECHAR                **pServerPrincName,
  2605.         [out] DWORD                   *pAuthnLevel,
  2606.         [out] DWORD                   *pImpLevel,
  2607.         [out] void                   **pAuthInfo,
  2608.         [out] DWORD                   *pCapabilites
  2609.     );
  2610.  
  2611.     HRESULT SetBlanket
  2612.     (
  2613.         [in] IUnknown                 *pProxy,
  2614.         [in] DWORD                     AuthnSvc,
  2615.         [in] DWORD                     AuthzSvc,
  2616.         [in] OLECHAR                  *pServerPrincName,
  2617.         [in] DWORD                     AuthnLevel,
  2618.         [in] DWORD                     ImpLevel,
  2619.         [in] void                     *pAuthInfo,
  2620.         [in] DWORD                     Capabilities
  2621.     );
  2622.  
  2623.     HRESULT CopyProxy
  2624.     (
  2625.         [in]  IUnknown  *pProxy,
  2626.         [out] IUnknown **ppCopy
  2627.     );
  2628. }
  2629.  
  2630. [
  2631.     local,
  2632.     object,
  2633.     uuid(0000013E-0000-0000-C000-000000000046)
  2634. ]
  2635. interface IServerSecurity : IUnknown
  2636. {
  2637.     HRESULT QueryBlanket
  2638.     (
  2639.         [out] DWORD    *pAuthnSvc,
  2640.         [out] DWORD    *pAuthzSvc,
  2641.         [out] OLECHAR **pServerPrincName,
  2642.         [out] DWORD    *pAuthnLevel,
  2643.         [out] DWORD    *pImpLevel,
  2644.         [out] void    **pPrivs,
  2645.         [out] DWORD    *pCapabilities
  2646.     );
  2647.  
  2648.     HRESULT ImpersonateClient();
  2649.  
  2650.     HRESULT RevertToSelf();
  2651.  
  2652.     BOOL IsImpersonating();
  2653. }
  2654.  
  2655. [
  2656.     object,
  2657.     uuid(00000140-0000-0000-C000-000000000046)
  2658. ]
  2659.  
  2660. interface IClassActivator : IUnknown
  2661. {
  2662.     HRESULT GetClassObject(
  2663.         [in] REFCLSID rclsid,
  2664.         [in] DWORD dwClassContext,
  2665.         [in] LCID locale,
  2666.         [in] REFIID riid,
  2667.         [out, iid_is(riid)] void **ppv);
  2668. }
  2669.  
  2670. cpp_quote( "#endif //DCOM" )
  2671.  
  2672.  
  2673. [
  2674.     object,
  2675.     uuid(99caf010-415e-11cf-8814-00aa00b569f5),
  2676.     pointer_default(unique)
  2677. ]
  2678.  
  2679. interface IFillLockBytes: IUnknown
  2680. {
  2681.     [local]
  2682.     HRESULT FillAppend
  2683.     (
  2684.         [in, size_is(cb)] void const *pv,
  2685.         [in] ULONG cb,
  2686.         [out] ULONG *pcbWritten
  2687.     );
  2688.  
  2689.     [call_as(FillAppend)]
  2690.     HRESULT _stdcall RemoteFillAppend(
  2691.         [in, size_is(cb)] byte const *pv,
  2692.         [in] ULONG cb,
  2693.         [out] ULONG *pcbWritten);
  2694.  
  2695.     [local]
  2696.     HRESULT FillAt
  2697.     (
  2698.         [in] ULARGE_INTEGER ulOffset,
  2699.         [in, size_is(cb)] void const *pv,
  2700.         [in] ULONG cb,
  2701.         [out] ULONG *pcbWritten
  2702.     );
  2703.  
  2704.     [call_as(FillAt)]
  2705.     HRESULT _stdcall RemoteFillAt(
  2706.         [in] ULARGE_INTEGER ulOffset,
  2707.         [in, size_is(cb)] byte const *pv,
  2708.         [in] ULONG cb,
  2709.         [out] ULONG *pcbWritten);
  2710.  
  2711.     HRESULT SetFillSize
  2712.     (
  2713.         [in] ULARGE_INTEGER ulSize
  2714.     );
  2715.  
  2716.     HRESULT Terminate
  2717.     (
  2718.         [in] BOOL bCanceled
  2719.     );
  2720. }
  2721.  
  2722.  
  2723. [
  2724.     object,
  2725.     uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
  2726.     pointer_default(unique)
  2727. ]
  2728.  
  2729. interface IProgressNotify: IUnknown
  2730. {
  2731.     HRESULT OnProgress
  2732.     (
  2733.         [in] DWORD dwProgressCurrent,
  2734.         [in] DWORD dwProgressMaximum,
  2735.         [in] BOOL  fAccurate,
  2736.         [in] BOOL  fOwner
  2737.     );
  2738. }
  2739.  
  2740.  
  2741. [
  2742.     local,
  2743.     object,
  2744.     uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
  2745.     pointer_default(unique)
  2746. ]
  2747.  
  2748. interface ILayoutStorage: IUnknown
  2749. {
  2750.         typedef struct tagStorageLayout
  2751.         {
  2752.             DWORD LayoutType;
  2753.             OLECHAR *pwcsElementName;
  2754.             LARGE_INTEGER cOffset;
  2755.             LARGE_INTEGER cBytes;
  2756.         } StorageLayout;
  2757.  
  2758.         HRESULT __stdcall LayoutScript
  2759.         (
  2760.             [in] StorageLayout *pStorageLayout,
  2761.             [in] DWORD nEntries,
  2762.             [in] DWORD glfInterleavedFlag
  2763.         );
  2764.         HRESULT __stdcall BeginMonitor(void);
  2765.  
  2766.         HRESULT __stdcall EndMonitor(void);
  2767.  
  2768.         HRESULT __stdcall ReLayoutDocfile
  2769.         (
  2770.             [in] OLECHAR *pwcsNewDfName
  2771.         );
  2772.  
  2773.         HRESULT __stdcall ReLayoutDocfileOnILockBytes
  2774.         (
  2775.             [in] ILockBytes *pILockBytes
  2776.         );
  2777.  
  2778.  
  2779. }
  2780.  
  2781.